package com.konsung.presenter;

import com.konsung.bean.MeasureDataBean;
import com.konsung.bean.PatientBean;
import com.konsung.kslibrary.base.BasePresenter;
import com.konsung.kslibrary.base.MvpView;
import com.konsung.ui.HealthReportActivity;
import com.konsung.ui.defineview.LoadingDialog;

import java.util.Date;
import java.util.List;

/**
 * 类功能：界面回显 逻辑实现接口
 * @param <V>视图类型
 */

public class HealthFilePresenter<V extends MvpView> extends BasePresenter<V> {


    /**
     * 界面回显
     */
    public interface View {
        /**
         * 居民列表加载更多
         * @param list 居民列表
         */
        void addPatient(List<PatientBean> list);

        /**
         * 刷新居民列表
         * @param list 居民列表
         */
        void refreshPatient(List<PatientBean> list);

        /**
         * 删除居民列表
         * @param list 居民列表
         */
        void deletePatient(List<String> list);
        /**
         * 不删除的居民列表
         * @return  list 居民列表
         */
        List<PatientBean> notDeletePatient();

        /**
         * 显示体检报告
         * @param state 报告数据状态
         * @param list 当前居民的所有测量数据
         */
        void showReport(HealthReportActivity.ReportState state, List<MeasureDataBean> list);

        /**
         * 初始化当前居民测量数据
         * @param measureDataBean 当前居民的最新测量数据
         * @param allPatientSize 所有居民数量
         * @param currentPatient 当前居民
         * @param patientSize 条件查询的居民数量
         */
        void initMeasureData(MeasureDataBean measureDataBean, long allPatientSize, PatientBean
                currentPatient, String patientSize);
    }

    /**
     * 逻辑实现
     */
    public interface Presenter {
        /**
         *
         * 根据条件查询居民，数据按添加时间排序
         * @param start 起始位置
         * @param length 获取的长度
         * @return 所有的居民
         */
        List<PatientBean> getAllPatientBean(int start, int length);

        /**
         *
         * 获取条件里的居民，数据按添加时间排序
         * @param condition 条件
         * @param start 起始日期
         * @param stop 结束日期
         * @param uploadState 数据上传状态
         * @param sex 用户性别
         * @param startIndex startIndex
         * @param length length
         * @param isQuery 区分查询和筛选按钮的点击
         * @return 条件里的居民
         */
        List<PatientBean> getPatientBean(String condition, Date start, Date stop, int uploadState
                , int sex, int startIndex, int length, boolean isQuery);

        /**
         * 删除居民档案
         * @param deletePatient 居民档案身份证列表
         * @param isAllSelected 是否选中全选
         * @param condition 条件
         * @param start 起始日期
         * @param stop 结束日期
         * @param dialog LoadingDialog
         * @param sex 性别
         * @param isQuery 区分查询数据还是筛选数据
         * @param uploadState 上传状态
         */
        void deletePatient(List<String> deletePatient, boolean isAllSelected, String condition,
                Date start, Date stop, int sex, int uploadState, boolean isQuery
                , LoadingDialog dialog);

        /**
         * 获取最新的测量记录
         * @param tempContent  查询条件
         * @param tempStart 起始时间
         * @param tempStop 结束时间
         */
        void getNewestMeasureData(String tempContent, Date tempStart, Date tempStop);

        /**
         * 获取转换后的测量数据
         * @param value 转换前的测量数据
         * @return 转换后的测量数据
         */
        String getMeasureValue(int value);

        /**
         * 获取所有的测量数据
         * @return 所有的测量数据
         */
        List<MeasureDataBean> getAllMeasureData();
        /**
         * 获取当前居民
         * @return 当前居民
         */
        PatientBean getCurrentPatient();

        /**
         * 获取居民长度
         * @return 居民长度
         * @param tempContent  查询条件
         * @param tempStart 起始时间
         * @param tempStop 结束时间
         */
        String getPatientSize(String tempContent, Date tempStart, Date tempStop);

        /**
         * 获取筛选总人数值
         * @param sex 性别
         * @param upload 是否上传
         * @param start 起始时间
         * @param stop 截止时间
         * @return 筛选状态下带条件的总人数查询返回数量值
         */
        String getPatientSizeInSelect(int sex, int upload, Date start, Date stop);

        /**
         * 获取居民长度
         * @return 居民长度
         */
        long getAllPatientSize();

        /**
         * 初始化报告数据
         */
        void initReportData();

        /**
         * 升级过来的用户数据进行数据转化，低版本没有上传状态字段，需手动数据转换
         */
        void switchValue();
    }
}
